package zrpc

import (
    "context"
    "net"
    "net/rpc"

    "gitee.com/shijingzhao/z-frame/zlog"
)

// Config rpc服务器配置
type Config struct {
    Addr string `json:"addr"`
}

// TcpConf 客户端配置链接
type TcpConf struct {
    Addr   string `json:"addr"`
    Method string `json:"method"`
}

type Server struct {
    ctx context.Context

    config Config

    ser *rpc.Server
    lis *net.TCPListener

    Handlers []Handler
}

type Handler struct {
    Name     string
    Obj      any
    Input    any
    Output   any
    Function func(ctx context.Context, args, reply any) error
}

type Client struct {
    ctx context.Context

    config TcpConf

    client *rpc.Client
}

// Close 终止
func (s *Server) Close() bool {
    if err := s.lis.Close(); err != nil {
        zlog.NewSystemLogger(s.ctx).Error(
            "rpc服务器:关闭tcp监听异常",
            zlog.String("s.lis.Close.err", err.Error()),
        )
        return false
    } else {
        return true
    }
}
